Este método consiste en repetir el experimento varia veces partiendo los datos y luego calcular la media obtenidas de las medias de evaluación . Con esto se busca estimar la precisión del modelo y optimizar los parámetros de este.
Este método consiste en partir de forma aleatoria del conjunto de datos en dos nuevos conjuntos, de los cuales uno de esos sirve para construir los modelos y el otro para validar su efectividad.
library(caret)
library(devtools)
set.seed(2018) # semilla aleatoria para que al correr siempre de mismo resultado
index <- createDataPartition(data$y, p=0.8, list = F)
train <- data[index, ] # conjunto de entrenamiento
test <- data[-index, ] # Conjunto de prueba
p :
Permite definir el total de unidades usadas en el conjunto de entrenamiento.data$y :
Variabe dependiente de la base de datos.list = F :
Que no me imprima los resultados como una lista.Nota: Este método puede ser muy ágil para procesar los datos aunque puede no ofrecer una validación confiable ya que en ocasiones el resultado de la validación depende de como partamos los datos.
Los datos son divididos en k subconjuntos, de los cuales k-1 subconjuntos son tomados como conjunto de entrenamiento y el subconjunto restante como conjunto de prueba. Este proceso es repetido k iteraciones.
El error total es calculado de la siguiente manera :
\[E = \frac{1}{K}\sum_{i=1}^k E_i\]
library(caret)
## Warning: package 'caret' was built under R version 3.5.2
## Warning: package 'ggplot2' was built under R version 3.5.2
data <- sample(1:20, size = 80, replace = TRUE)
(folds <- groupKFold(data, k = 10))
## $Fold01
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24
## [24] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
## [47] 48 49 50 51 52 53 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
## [70] 72 73 74 75 76 77 78 79 80
##
## $Fold02
## [1] 1 2 4 6 7 8 9 10 11 12 13 14 15 18 19 20 21 23 24 25 26 27 28
## [24] 29 30 31 33 34 35 36 37 38 39 41 42 43 44 46 47 48 49 50 51 52 53 54
## [47] 56 57 58 59 60 61 63 64 65 66 67 68 69 70 72 73 74 75 76 77 78 79 80
##
## $Fold03
## [1] 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 19 20 21 22 23 24 25
## [24] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
## [47] 49 50 52 53 54 55 56 57 58 59 60 62 63 64 65 66 67 68 69 70 71 72 73
## [70] 74 75 76 77 78 79
##
## $Fold04
## [1] 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24 25
## [24] 27 28 29 31 32 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
## [47] 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 72 73 74 76
## [70] 77 79 80
##
## $Fold05
## [1] 1 2 3 4 5 6 7 8 9 10 12 13 15 16 17 18 19 20 21 22 23 24 26
## [24] 27 28 29 30 31 32 33 34 38 39 40 41 42 43 45 46 47 48 49 50 51 52 53
## [47] 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
## [70] 78 79 80
##
## $Fold06
## [1] 1 3 4 5 6 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 26 27
## [24] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 48 49 50 51
## [47] 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
## [70] 76 77 78 79 80
##
## $Fold07
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 25
## [24] 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 44 45 46 47 48 49 50
## [47] 51 52 53 54 55 56 57 59 60 61 62 64 65 67 68 69 70 71 72 74 75 77 78
## [70] 80
##
## $Fold08
## [1] 1 2 3 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25
## [24] 26 28 29 30 31 32 33 34 35 36 37 39 40 42 43 44 45 46 47 48 49 50 51
## [47] 53 54 55 56 57 58 59 60 61 62 63 65 66 67 68 69 70 71 73 74 75 76 77
## [70] 78 79 80
##
## $Fold09
## [1] 1 2 3 4 5 6 7 8 10 11 12 14 15 16 17 18 19 20 21 22 24 25 26
## [24] 27 29 30 32 33 34 35 36 37 38 39 40 41 43 44 45 47 51 52 54 55 56 58
## [47] 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76 77 78 79 80
##
## $Fold10
## [1] 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
## [24] 25 26 27 28 30 31 32 33 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
## [47] 50 51 52 53 54 55 57 58 59 60 61 62 63 64 66 68 70 71 72 73 75 76 77
## [70] 78 79 80
Nota: Aunque este método es bastante bueno para la validación su desventaja es su costo y lentitud computacional. En la práctica el número de k es elegido dependiendo del tamaño del conjunto de datos pero lo más común es elegir k = 10.
Este método consiste de tomar de forma aleatoria cierta cantidad de los individuos de la bases de datos para forma el conjunto de entrenamiento. Este proceso se repite k iteraciones.
El error total es calculado de la siguiente manera :
\[E = \frac{1}{K}\sum_{i=1}^k E_i\]
(flds <- createFolds(data, k = 10,list = TRUE, returnTrain = T))
## $Fold01
## [1] 1 2 3 4 5 6 8 9 11 12 13 14 15 17 18 19 20 21 22 23 27 28 29
## [24] 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 52 53
## [47] 54 55 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 76 77 78
## [70] 79 80
##
## $Fold02
## [1] 3 4 6 7 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
## [24] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 47 48 49 50 51
## [47] 52 53 54 55 56 57 59 60 61 63 64 65 66 67 68 69 70 71 72 73 74 75 76
## [70] 77 78 79
##
## $Fold03
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24
## [24] 25 26 27 28 29 30 31 32 33 34 35 37 38 39 40 41 43 44 45 46 47 48 49
## [47] 50 52 53 55 56 57 58 59 60 61 62 63 64 66 68 69 70 71 72 73 74 75 76
## [70] 77 79 80
##
## $Fold04
## [1] 1 2 3 5 6 7 8 9 10 11 12 13 15 16 17 18 20 21 22 23 24 25 26
## [24] 27 28 29 30 31 32 33 34 35 36 38 39 41 42 43 44 45 46 47 48 49 50 51
## [47] 52 53 54 56 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77
## [70] 78 79 80
##
## $Fold05
## [1] 1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
## [24] 25 26 27 28 29 30 31 32 33 35 36 37 39 40 41 42 43 44 45 46 48 49 50
## [47] 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 70 71 72 73 74
## [70] 76 77 78 79 80
##
## $Fold06
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 21 22 23 24
## [24] 25 26 27 28 29 30 33 34 35 36 37 38 40 42 43 44 45 46 47 49 50 51 52
## [47] 53 54 55 56 57 58 59 60 62 63 64 65 66 67 68 70 71 72 73 74 75 76 78
## [70] 79 80
##
## $Fold07
## [1] 1 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
## [24] 25 26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
## [47] 50 51 52 53 54 55 56 57 58 59 61 62 63 65 66 67 68 69 70 71 72 73 75
## [70] 77 78 80
##
## $Fold08
## [1] 1 2 3 4 5 7 8 9 10 12 13 14 16 17 18 19 20 21 22 24 25 26 27
## [24] 28 29 31 32 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
## [47] 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 74 75 76
## [70] 77 78 79 80
##
## $Fold09
## [1] 1 2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 19 20 22 23 24 25 26
## [24] 27 30 31 32 33 34 35 36 37 38 39 40 41 42 43 46 47 48 49 50 51 53 54
## [47] 55 56 57 58 59 60 61 62 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
## [70] 79 80
##
## $Fold10
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 23 24 25
## [24] 26 27 28 29 30 31 32 33 34 36 37 38 39 40 41 42 43 44 45 46 47 48 49
## [47] 51 52 54 55 56 57 58 60 61 62 63 64 65 66 67 69 70 72 73 74 75 76 77
## [70] 78 79 80
returnTrain = T :
Retornar el conjunto de entrenamiento, si se pone en falta retorna el conjunto de prueba.Nota: La complicación de este método se puede dar cuando en la selección aleatoria en las k iteraciones puede ocurrir que queden unidades sin probar.
Este método consiste en realizar N iteraciones donde en cada iteración se deja un solo dato en el conjunto de prueba.
El error total es calculado de la siguiente manera :
\[E = \frac{1}{N}\sum_{i=1}^N E_i\]
library(DMwR)
## Warning: package 'DMwR' was built under R version 3.5.2
data(swiss)
## First the user defined function (note: can have any name)
user.rpart <- function(form, train, test) {
require(rpart)
model <- rpart(formula = form,data = train)
preds <- predict(model, test)
}
## Now the evaluation
eval.res <- loocv(learner('user.rpart'),
dataset(Infant.Mortality ~ ., swiss),
loocvSettings(1234))
##
## LOOCV experiment with verbose = FALSE and seed = 1234
## Check a summary of the results
summary(eval.res)
##
## == Summary of a Leave One Out Cross Validation Experiment ==
##
## LOOCV experiment with verbose = FALSE and seed = 1234
##
## * Data set :: swiss
## * Learner :: user.rpart with parameters:
##
## * Summary of Experiment Results:
## Rive Gauche
## avg 20.047569
## std 1.976254
## min 17.000000
## max 23.066667
## invalid 0.000000
loocvSettings(1234) :
Semilla aleatoria.learner('user.rpart') :
modelo a usar.dataset(Infant.Mortality ~ ., swiss) :
Formula del modelo a usar y base de datos.Nota: Este método ofrece un errore muy bajo aunque presenta un costo computacional muy grande.